﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using System.Resources;
using System.Data.Linq;
using CDStore3Tiers;
using System.Linq;

namespace CuaHangDiaNhac
{
	public partial class frmDatHang : DevComponents.DotNetBar.Metro.MetroForm
	{
		log4net.ILog log = log4net.LogManager.GetLogger("Đặt hàng");
		StoreCDDataContext db;
		List<vwDiaNhacBan> ListDia = new List<vwDiaNhacBan>();
		XuLyForm Xl = new XuLyForm();
		XuLyDatHang XLDH = new XuLyDatHang();
		List<DatHang> list;
		XuLyDataGridView dt;
		XLDangNhap dangnhap = new XLDangNhap();
		frmChiTietDatHang dndh;
		frmInDatHang indh;
        int PagingNumber = 0;
        int PagingSize = 25;

		public void lockLogin()
		{
			string id = frmLogin.id;
			XLPhanQuyen phanquyen = new XLPhanQuyen();
			List<TaiKhoanChucNang> tkcn = new List<TaiKhoanChucNang>();
			tkcn = phanquyen.TKChucNang(frmLogin.id);


			if (phanquyen.CoQuyen(id, 1001))
			{
				btnThemDDH.Enabled = true;
				btnThemDDH.Visible = true;
			}
			if (phanquyen.CoQuyen(id, 1002))
			{
				btnXoaDDH.Visible = true;
				tsDelete.Enabled = true;
			}
			if (phanquyen.CoQuyen(id, 1003))
			{
				tsSave.Enabled = true;
				LuuDSDDH.Visible = true;
			}
			if (phanquyen.CoQuyen(id, 1008))
			{
				btnCTDDH.Visible = true;
			}
		}

		public void closeall()
		{
			btnThemDDH.Enabled = false;
			btnThemDDH.Visible = false;
			btnXoaDDH.Visible = false;
			tsDelete.Enabled = false;
			tsSave.Enabled = false;
			LuuDSDDH.Visible = false;
			btnCTDDH.Visible = true;
		}
		public frmDatHang()
		{
			XLDH = new XuLyDatHang();
			InitializeComponent();
			db = new StoreCDDataContext();
			db.Connection.ConnectionString = getConfig.getConnection();
		}
		private void ResetList()
		{
			list = XLDH.DSDatHang();
		}


		DataGridViewTextBoxColumn colMaDH;
		DataGridViewTextBoxColumn colTenKH;
		DataGridViewTextBoxColumn colDiaChi;
		DataGridViewTextBoxColumn colSDT;
		DataGridViewTextBoxColumn colNgayDH;
		DataGridViewTextBoxColumn colNgayHen;
		DataGridViewTextBoxColumn colDatCoc;
		DataGridViewCheckBoxColumn colDaGiaoHang;
		public void LoadDSDH()
		{
            db = new StoreCDDataContext();
            db.Connection.ConnectionString = getConfig.getConnection();
			var dathang = db.DatHang_SelectAll();
			BindingSource bds = new BindingSource();
            bds.DataSource = dathang.Skip(PagingNumber).Take(PagingSize);
			bindingNavigator1.BindingSource = bds;
			dgvDH.DataSource = bds;
            lbPageTotal.Text = (XLDH.TongSoTrang(PagingSize)).ToString();
            txtPage.Text = (XLDH.SoTrangHienTai(PagingNumber, PagingSize)).ToString();
			ResetList();
		}
		public void LoadDGVDH()
		{
			dgvDH.DataSource = null;

			colMaDH = new DataGridViewTextBoxColumn();
			colMaDH.DataPropertyName = "MaDH";
			colMaDH.HeaderText = "Mã đặt hàng ";
			colMaDH.Name = "cnameMaDH";
            colMaDH.ReadOnly = true;
			dgvDH.Columns.Add(colMaDH);

			colTenKH = new DataGridViewTextBoxColumn();
			colTenKH.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			colTenKH.DataPropertyName = "TenKH";
			colTenKH.HeaderText = "Tên khách hàng";
			colTenKH.Name = "cnameTenKH";
			dgvDH.Columns.Add(colTenKH);

			colDiaChi = new DataGridViewTextBoxColumn();
			colDiaChi.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			colDiaChi.DataPropertyName = "DiaChi";
			colDiaChi.HeaderText = "Địa chỉ khách hàng";
			colDiaChi.Name = "cnameDiaChi";
			dgvDH.Columns.Add(colDiaChi);

			colSDT = new DataGridViewTextBoxColumn();
			colSDT.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			colSDT.DataPropertyName = "SoDT";
			colSDT.HeaderText = "Số điện thoại";
			colSDT.Name = "cnameSDT";
			dgvDH.Columns.Add(colSDT);

			colNgayDH = new DataGridViewTextBoxColumn();
			colNgayDH.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			colNgayDH.DataPropertyName = "NgayDH";
			colNgayDH.HeaderText = "Ngày đặt hàng";
			colNgayDH.Name = "cnameNgayDH";
			dgvDH.Columns.Add(colNgayDH);

			colNgayHen = new DataGridViewTextBoxColumn();
			colNgayHen.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			colNgayHen.DataPropertyName = "NgayHen";
			colNgayHen.HeaderText = "Ngày hẹn ";
			colNgayHen.Name = "cnameNgayHen";
			dgvDH.Columns.Add(colNgayHen);

			colDatCoc = new DataGridViewTextBoxColumn();
			colDatCoc.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			colDatCoc.DataPropertyName = "DatCoc";
			colDatCoc.HeaderText = "Đặt cọc";
			colDatCoc.Name = "cnameDatCoc";
			dgvDH.Columns.Add(colDatCoc);

			colDaGiaoHang = new DataGridViewCheckBoxColumn();
			colDaGiaoHang.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			colDaGiaoHang.DataPropertyName = "DaGiaoHang";
			colDaGiaoHang.HeaderText = "Đã giao hàng";
			colDaGiaoHang.Name = "cnameDaGiaoHang";
			colDaGiaoHang.ReadOnly = true;
			dgvDH.Columns.Add(colDaGiaoHang);

			LoadDSDH();

		}
		private void tsDelete_Click(object sender, EventArgs e)
		{
			int xoa = 0;
			string mes = "";
			db = new StoreCDDataContext();
		    db.Connection.ConnectionString = getConfig.getConnection();
			DatHang dh = new DatHang();
			if (dgvDH.SelectedRows.Count > 0)
			{
				foreach (DataGridViewRow r in dgvDH.SelectedRows)
				{
					int madh = int.Parse(r.Cells["cnameMaDH"].Value.ToString().Trim());
					if (XLDH.KiemTraGiaoHang(madh))
					{
						xoa = 1;
						mes += "\n --Đơn đặt hàng có mã : {" + madh + "} ";
					}
					else
					{
						DialogResult accept = DevComponents.DotNetBar.MessageBoxEx.Show("Bạn muốn xóa đơn đặt hàng mã số : " + madh.ToString() + " ?", "thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
						if (accept == DialogResult.Yes)
						{
							var xoactdh = db.ChiTietDatHang_DeleteDH(madh);
							var xoadh = db.DatHang_Delete(madh);
							log.Info(frmLogin.id + ": đã xóa đơn đặt hàng mã số [" + madh + "]");
							db.SubmitChanges();
						}
					}
				}
				if (xoa == 1)
				{
					MessageBoxEx.Show("Những đơn đặt hàng không được phép xóa : " + mes);
				}
				LoadDGVDH();
			}
		}
		private void tsRefesh_Click(object sender, EventArgs e)
		{
			LoadDGVDH();
			log.Info(frmLogin.id + ": đã làm mới danh sách đặt hàng");
		}
		private void dgvDH_MouseDown(object sender, MouseEventArgs e)
		{
			DataGridView.HitTestInfo hit;
			if (e.Button == MouseButtons.Right)
			{
				hit = dgvDH.HitTest(e.X, e.Y);
				if (hit.Type == DataGridViewHitTestType.Cell)
				{
					if (!((DataGridViewRow)(dgvDH.Rows[hit.RowIndex])).Selected)
					{
						dgvDH.ClearSelection();
						((DataGridViewRow)dgvDH.Rows[hit.RowIndex]).Selected = true;
					}
				}
			}
			if (dgvDH.SelectedRows.Count > 1)
				LockContextMenu(false);
			else
				LockContextMenu(true);
		}
		private void LockContextMenu(bool p)
		{
			btnCTDDH.Enabled = p;
			btnInDDH2.Enabled = p;
		}
		private void tsSave_Click(object sender, EventArgs e)
		{
            db = new StoreCDDataContext();
            db.Connection.ConnectionString = getConfig.getConnection();
			int notok = 0;
			string error = "";
			if (dgvDH.Rows.Count > 0)
			{
				for (int i = 0; i < dgvDH.Rows.Count; i++)
				{
					string tenkh = Xl.CToString(dgvDH.Rows[i].Cells["cnameTenKh"].Value.ToString().Trim());
					string diachi = Xl.CToString(dgvDH.Rows[i].Cells["cnameDiaChi"].Value);
					int sdt = (Convert.ToInt32(dgvDH.Rows[i].Cells["cnameSDT"].Value));
					DateTime ngaydh = Convert.ToDateTime(dgvDH.Rows[i].Cells["cnameNgayDH"].Value.ToString().Trim());
					DateTime ngayhen = Convert.ToDateTime(dgvDH.Rows[i].Cells["cnameNgayHen"].Value.ToString().Trim());
					decimal datcoc = Convert.ToDecimal(dgvDH.Rows[i].Cells["cnameDatCoc"].Value);
					int madh = Convert.ToInt32(dgvDH.Rows[i].Cells["cnameMaDH"].Value.ToString());

					if (Convert.ToInt32(dgvDH.Rows[i].Cells["cnameDaGiaoHang"].Value) != 1)
					{
						if (ngayhen >= ngaydh)
						{
							if (ngaydh <= DateTime.Now)
							{
								if (datcoc >= 10000)
								{
									var update = db.DatHang_UpdateDH(madh, tenkh, diachi, sdt, ngaydh, ngayhen, datcoc);
									log.Info(frmLogin.id + ": đã cập nhật lại thông tin cho đặt hàng có mã số [" + madh + "]");
								}
								else
								{
									notok = 1;
									error += "\n--Đặt cọc của đặt hàng [" + madh + "] phải ít nhất 10000 trở lên!";
								}
							}
							else
							{
								notok = 1;
								error += "\n--Ngày đặt hàng của mã đặt hàng ["+ madh + "] sửa phải nhỏ hơn hoặc bằng ngày hiện tại ";
							}
						}
						else
						{
							notok = 1;
							error += "\n--Ngày hẹn của đặt hàng [" + madh + "] phải lớn hơn hoặc bằng ngày đặt!";
						}
					}
				}

				if (notok == 1)
				{

					MessageBoxEx.Show("*Lưu ý những đơn đặt hàng đã giao không thể sửa !\n*Những thông tin sau sửa không hợp lệ :"
						+ error + "\n*Còn lại đã lưu thành công!");
				}
				else
				{
					MessageBoxEx.Show("Lưu thành công tất cả sửa đổi!");
				}
			}

			LoadDGVDH();
			db.SubmitChanges();
		}
		private void tsTimkiem_Leave(object sender, EventArgs e)
		{
			if (string.IsNullOrEmpty(tsTimkiem.Text))
			{
				tsTimkiem.Text = "Tìm Kiếm ";
				Xl.loadDGV(bindingNavigator1, dgvDH, list);
			}
		}
		private void tsTimkiem_MouseUp(object sender, MouseEventArgs e)
		{
			tsTimkiem.Clear();
		}
		private void tsTimkiem_TextChanged(object sender, EventArgs e)
		{
			XLDH = new XuLyDatHang();
			Xl.loadDGV(bindingNavigator1, dgvDH, XLDH.SearchDH(list, tsTimkiem.Text));
		}
		frmQuanLyHoaDon ql = new frmQuanLyHoaDon();
		private void btnCTDDH_Click(object sender, EventArgs e)
		{
			if (dgvDH.SelectedRows.Count > 0)
			{
				foreach (DataGridViewRow r in dgvDH.SelectedRows)
				{
					int maso = Convert.ToInt32(r.Cells["cnameMaDH"].Value.ToString());
					string tenkh = (r.Cells["cnameTenKh"].Value.ToString());
					int sdt = Convert.ToInt32(r.Cells["cnameSDT"].Value.ToString());
					dndh = new frmChiTietDatHang(maso, tenkh, sdt);

				}
			}
			dndh.ShowDialog(this);
		}
		private void btnThemDDH_Click(object sender, EventArgs e)
		{
			navigationPane1.Expanded = true;
			exThemDH.Expanded = true;
			log.Info(frmLogin.id + ": đã chọn chức năng thêm đơn đặt hàng");
		}
		private void bttThemDH_Click(object sender, EventArgs e)
		{
            db = new StoreCDDataContext();
            db.Connection.ConnectionString = getConfig.getConnection();
			DatHang dh = new DatHang();
			try
			{
				if (Convert.ToDateTime(dateNgayHen.Value.ToShortDateString()) >= Convert.ToDateTime(dateNgayDH.Value.ToShortDateString())
					&& txtDatCoc.Text.Trim() != "" && txtDatCoc.Text.Trim().All(char.IsDigit) && dateNgayDH.Value == DateTime.Now 
					&& mtbSDT.Text != "" && txtTenKH.Text.Trim() != "")
				{

					dh.TenKH = txtTenKH.Text.Trim();
					dh.DiaChi = txtDiaChi.Text.Trim();
					dh.SoDT = Convert.ToInt32(mtbSDT.Text);
					dh.NgayDH = Convert.ToDateTime(dateNgayDH.Value.ToShortDateString());
					dh.NgayHen = Convert.ToDateTime(dateNgayHen.Value.ToShortDateString());
					dh.DatCoc = Convert.ToInt32(txtDatCoc.Text.Trim());
					dh.DaGiaoHang = false;


					if (XLDH.KiemTraTrung(dh.TenKH, dh.SoDT, dh.DiaChi, dh.NgayDH, dh.NgayHen) == 1)
					{
						MessageBoxEx.Show("Đã tồn tại đơn đặt hàng này");
					}
					else if (Convert.ToInt32(txtDatCoc.Text) < 10000)
					{
						MessageBoxEx.Show("Đặt cọc tối thiểu 10000");
					}
					else 
					{
						DialogResult a = MessageBoxEx.Show("Bạn có muốn thêm đơn đặt hàng ?"
							, "thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
						if (a == DialogResult.Yes)
						{
							db.DatHang_Insert(dh.TenKH, dh.DiaChi, dh.SoDT, dh.NgayDH, dh.NgayHen, dh.DatCoc, dh.DaGiaoHang);
							db.SubmitChanges();
							int madh = XLDH.GetLastDH();
							log.Info(frmLogin.id + ": đã thêm đơn đặt hàng mã số [" + madh + "]");
						}
					}
				}
				else
				{
					MessageBoxEx.Show("Lưu ý : Bạn phải nhập đúng tất cả các thông tin ! \n--Ngày hẹn phải lớn hơn hoặc bằng ngày đặt hàng ! \n--Đặt cọc ít nhất phải 50 ngàn để giử hàng ! \n Ngày đặt hàng phải là ngày thêm đặt hàng !");
				}
			}
			catch (Exception ex)
			{
				MessageBoxEx.Show(ex.Message, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
				log.Error(frmLogin.id + ": thêm đơn đặt hàng mới thất bại");
			}
			LoadDGVDH();
		}
		// luong
		private List<vwDiaNhacBan> ThemCTHoaDon(int Madh)
		{
			XuLyDatHang xl = new XuLyDatHang();
			List<vw_CTDHNew> l = xl.LayChiTietDatHang_Ma(Madh);
			List<vwDiaNhacBan> kq = new List<vwDiaNhacBan>();
			for (int j = 0; j < l.Count; j++)
			{
				vwDiaNhacBan dn = new vwDiaNhacBan();
				dn.MaDia = ConvertType.ToInt(l[j].MaDia.ToString());
				dn.TenDia = ConvertType.ToString(l[j].TenDia.ToString());
				dn.SoLuongDia = ConvertType.ToInt(l[j].SoLuong.ToString());
				dn.DonGiaBan = ConvertType.ToDecimal(l[j].DonGiaBan.ToString());
				kq.Add(dn);
			}
			return kq;
		}
		private void btnGiaoHang_Click(object sender, EventArgs e)
		{
			// frmMain frm = MdiParent as frmMain;
			for (int k = 0; k < dgvDH.SelectedRows.Count; k++)
			{
				XuLyHoaDon xl = new XuLyHoaDon();
				XuLyDatHang XlDatHang = new XuLyDatHang();
				int madh = Convert.ToInt32(dgvDH.SelectedRows[k].Cells["cnameMaDH"].Value.ToString());
				if (XlDatHang.KiemTraGiaoHang(madh))
					MessageBox.Show("Don dat hang da giao hang.");
				else
				{
					DateTime thoigian = DateTime.Now;
					XuLyHoaDon.ThemMoiHoaDon("", thoigian, frmLogin.id);
					int mahoadon = xl.LayMaHoaDon();

					//int a = xl.LayMaHoaDon();
					string s = xl.LayNoiDungHD();
					DateTime day = XlDatHang.LayNgayLapDatHang();
					try
					{
						ListDia = ThemCTHoaDon(madh);
					}
					catch { };
					if (ListDia.Count == 0)
					{
						MessageBox.Show("Khong co dia nao trong don dat hang.");
						// break;
					}
					else
					{
						//SuKien sk = XuLyDiaNhac.KiemTraNgay_SuKien(day);
						decimal t = 0;

						for (int i = 0; i < ListDia.Count - 1; i++)
						{
							int j = ConvertType.ToInt(ListDia[i].MaDia);
							t = ConvertType.ToDecimal(ListDia[i].DonGiaBan * ListDia[i].SoLuongDia);
							db.ChiTietHoaDonBanHang_Insert(mahoadon, j, ListDia[i].SoLuongDia, ListDia[i].DonGiaBan, 0, madh, t);
							db.SubmitChanges();
						}
						XlDatHang.CapNhatDaGiao_True(madh);
						CDStore3Tiers.XuLyHoaDon.UpdateTTHoaDon(mahoadon, s, thoigian);
						//  frm.btnChiTietHoaDon_Click(mahoadon, e);

						MessageBox.Show("Them thanh cong hoa don moi co ma:" + mahoadon);
					}
				}

			}
			LoadDGVDH();
		}

		private void toolStripButton1_Click(object sender, EventArgs e)
		{
			if (dgvDH.SelectedRows.Count > 0)
			{
				int maso = 0;
				foreach (DataGridViewRow r in dgvDH.SelectedRows)
				{
					maso = Convert.ToInt32(r.Cells["cnameMaDH"].Value.ToString());
					indh = new frmInDatHang(maso);
				}
				indh.ShowDialog();
				log.Info(frmLogin.id + ": đã chọn chức năng in đơn đặt hàng mã số [" + maso + "]");
			}
		}

		private void frmDatHang_Load(object sender, EventArgs e)
		{
			closeall();
			lockLogin();
			db = new StoreCDDataContext();
			db.Connection.ConnectionString = getConfig.getConnection();
			LoadDGVDH();
			log.Info(frmLogin.id + ": đã load lên form đặt hàng");
            txtPage.ForeColor = Color.Red;
        }


        private void lbDpre_Click(object sender, EventArgs e)
        {
            PagingNumber = 0;
            LoadDSDH();
        }

        private void lbPre_Click(object sender, EventArgs e)
        {
            int sotranghientai = Convert.ToInt32(txtPage.Text);
            int tongtrang = Convert.ToInt32(lbPageTotal.Text);
            if (sotranghientai > 1)
            {
                PagingNumber -= PagingSize;
                LoadDSDH();
            }
        }

        private void lbNext_Click(object sender, EventArgs e)
        {
            int sotranghientai = Convert.ToInt32(txtPage.Text);
            int tongtrang = Convert.ToInt32(lbPageTotal.Text);
            if (sotranghientai < tongtrang)
            {
                PagingNumber += PagingSize;
                LoadDSDH();
            }
        }

        private void lbDnext_Click(object sender, EventArgs e)
        {
            int tongtrang = Convert.ToInt32(lbPageTotal.Text);
            PagingNumber = PagingSize * (tongtrang - 1);
            LoadDSDH();
        }

        private void txtPage_Leave(object sender, EventArgs e)
        {
            LoadDSDH();
        }

        private void txtPage_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                bool isValid = txtPage.Text.All(char.IsDigit);
                if (isValid && txtPage.Text != "")
                {
                    int textchange = Convert.ToInt32(txtPage.Text);
                    int tongtrang = Convert.ToInt32(lbPageTotal.Text);
                    if (textchange > 0 && textchange <= tongtrang)
                    {
                        PagingNumber = PagingSize * (textchange - 1);
                        LoadDSDH();
                    }
                    else if (tongtrang == 1)
                    {
                        MessageBoxEx.Show("Danh sách này chỉ có 1 trang");
                    }
                    else
                    {
                        MessageBoxEx.Show("Vui lòng nhập số trang từ 1 đến " + lbPageTotal.Text);
                    }
                }
                else
                {
                    MessageBoxEx.Show("Vui lòng nhập số trang từ 1 đến " + lbPageTotal.Text);
                }
            }
        }
	}
}












